package org.common.utils.database.access;
import org.common.utils.database.exception.DatabaseException;
import javax.sql.DataSource;

/**
 * 单数据访问对象
 * @author zhouzhibing
 * @date 2025/7/31
 */
public class DataAccessTool {

    private static final DataAccessTool INSTANCE = new DataAccessTool();

    /**
     * 数据访问对象
     */
    private DataAccess dataAccess;

    private DataAccessTool() {

    }

    public static DataAccessTool get() {
        return INSTANCE;
    }

    /**
     * 初始化数据访问
     * @param host 数据库地址 地址:端口/数据库名
     * @param username 用户名
     * @param password 密码
     */
    public synchronized void init(String host, String username, String password) {
        if(dataAccess != null){
            throw new DatabaseException("already init");
        }

        DataSource dataSource = DataSourceTool.newHikariDataSourceByHost(host, username, password);
        dataAccess = new DataAccess(dataSource);
    }

    /**
     * @return 是否初始化
     */
    public boolean isInit() {
        return dataAccess != null;
    }

    /**
     * @return 获取数据访问对象
     */
    public DataAccess getDataAccess() {
        if(dataAccess == null){
            throw new DatabaseException("not init");
        }
        return dataAccess;
    }

    public void destroy() {
        dataAccess = null;
    }

}
